package com.example.switchcontrolplatform.service;

import com.example.switchcontrolplatform.context.PricingContext;
import com.example.switchcontrolplatform.enumeration.ChannelType;
import com.example.switchcontrolplatform.enumeration.StrategyType;
import com.example.switchcontrolplatform.result.PricingResult;
import org.springframework.stereotype.Service;

/**
 * @Description: 策略接口
 *
 * @Author: zj
 * @CreateTime: 2025/10/27
 */
@Service
public interface PricingStrategy {
	/**
	 * 计算最终价格
	 */
	PricingResult calculatePrice(PricingContext context);

	/**
	 * 策略验证
	 */
	boolean validate(PricingContext context);

	/**
	 * 获取策略类型
	 */
	StrategyType getStrategyType();

	/**
	 * 获取策略优先级（用于策略链中的执行顺序）
	 */
	int getPriority();

	/**
	 * 是否启用该策略
	 */
	boolean isEnabled();

	/**
	 * 策略支持的渠道
	 */
	ChannelType[] getSupportedChannels();
}
